package air 
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	/**
	 * Air 本機檔案處理
	 * @author Cain
	 */
	public class DeskData extends EventDispatcher
	{
		/**
		 * 每個已安裝 AIR 應用程式唯一的儲存目錄
		 */
		static public const AppDire:File = File.applicationStorageDirectory;
		/**
		 * 應用程式 (和所有已安裝的資源) 安裝位置的唯讀目錄
		 */
		static public const ProDire:File = File.applicationStorageDirectory;
		/**
		 * 使用者的桌面目錄
		 */
		static public const Desk:File = File.desktopDirectory;
		/**
		 * 使用者的文件目錄
		 */
		static public const DocDire:File = File.documentsDirectory;
		/**
		 * 使用者目錄
		 */
		static public const UserDire:File = File.userDirectory;
		/**
		 * 儲存完畢 事件
		 */
		static public const SEVE_COMPLETE:String = "SEVE_COMPLETE";
		/**
		 * 存檔失敗
		 */
		static public const SAVE_ERROR:String = "SAVE_ERROR";
		/**
		 * 開啟失敗
		 */
		static public const OPENERROR:String = "OPENERROR";
		/**
		 * 檔案讀取完畢事件
		 */
		static public const DATAonCOMPLETE:String = "DATAonCOMPLETE";
		private var my_data:String; //資料
		private var file:FileStream;
		private var _fp:File;
		/**
		 * 本機文件處理
		 * @param	_pathDir 路徑模式
		 */
		public function DeskData(_pathDir:File=null)
		{
			if (_pathDir!=null) 
			{
				_fp = _pathDir;
			}else 
			{
				_fp = new File();
			}
			setup();
		}
		public function get data():String 
		{
			return String(my_data);
		}
		private function setup():void
		{
			
		}
		/**
		 * 載入文件
		 * @param	_path 相對路徑
		 */
		public function load(_path:String):void 
		{
			_fp = _fp.resolvePath(_path);
			file = new FileStream();
			try 
			{
				read_doc(); //讀取文件
			}catch (err:Error)
			{
				//trace("檔案開啟失敗");
				error_open(); //開啟失敗
			}
		}
		/**
		 * 儲存文件
		 * @param	_path 路徑
		 * @param	_data 資料
		 */
		public function save(_path:String,_data:String):void 
		{
			_fp = new File();
			_fp = _fp.resolvePath(_path);
			file = new FileStream();
			try 
			{
				save_data(_fp, _data);
			}catch (err:Error)
			{
				trace(err);
				dispatchEvent(new Event(SAVE_ERROR));
			}
		}
		private function save_data(_fp:File,_data:String):void
		{
			file.open(_fp, FileMode.WRITE);
			file.writeUTFBytes(_data);
			file.close();
			dispatchEvent(new Event(SEVE_COMPLETE));
		}
		private function error_open():void //開啟失敗
		{
			dispatchEvent(new Event(OPENERROR));
		}
		private function read_doc():void //讀取文件
		{
			try 
			{
				file.open(_fp, FileMode.READ);
				in_data(_fp.size); //讀入
			}catch (err:Error)
			{
				error_open(); //讀取失敗
			}
		}
		
		private function in_data(_n:Number):void
		{
			try 
			{
				my_data = file.readUTFBytes(_n);
				file.close();
				dispatchEvent(new Event(DATAonCOMPLETE));
			}catch (err:Error)
			{
				error_open(); //檔案讀取錯誤
			}
		}
		
		
	}

}